﻿namespace BlamanticUI.Components.Forms;

/// <summary>
/// Represents a container to display form input control with beautiful layout.
/// </summary>
[CssClass("input")]
public class InputBox : BlazorChildContentComponentBase, IHasUIComponent, IHasDisabled, IHasLoading, IHasInverted, IHasFluid, IHasSize, IHasState
{
    /// <summary>
    /// Gets or sets icon position of input.
    /// </summary>
    [Parameter] [CssClass(" icon", Suffix = true)] public HorizontalPosition? Icon { get; set; }
    /// <summary>
    /// Gets or sets the focus style.
    /// </summary>
    [Parameter] [CssClass("focus")] public bool Focus { get; set; }
    /// <summary>
    /// Gets or sets the action position of input.
    /// </summary>
    [Parameter] [CssClass(" action", Suffix = true)] public HorizontalPosition? Action { get; set; }
    /// <summary>
    /// Gets or sets a value indicating whether this component is loading status.
    /// </summary>
    [Parameter] public bool Loading { get; set; }
    /// <summary>
    /// Gets or sets a value indicating whether this is disabled.
    /// </summary>
    /// <value>
    ///   <c>true</c> if disabled; otherwise, <c>false</c>.
    /// </value>
    [Parameter] public bool Disabled { get; set; }

    /// <summary>
    /// Gets or sets the position of <see cref="Label"/> component.
    /// </summary>
    [Parameter] [CssClass(" labeled", Order = 150, Suffix = true)] public HorizontalPosition? Labeled { get; set; }

    /// <summary>
    /// Gets or sets the transparent style.
    /// </summary>
    [Parameter] [CssClass("transparent")] public bool Transparent { get; set; }

    /// <summary>
    /// Gets or sets the corner postion of label.
    /// </summary>
    [Parameter] [CssClass(" corner labeled", Order = 120, Suffix = true)] public HorizontalPosition? CorneredLabel { get; set; }
    /// <summary>
    /// Gets or sets a value indicating whether adapted inverted background by parent component.
    /// </summary>
    /// <value>
    ///   <c>true</c> if adapted; otherwise, <c>false</c>.
    /// </value>
    [Parameter] public bool Inverted { get; set; }
    /// <summary>
    /// Gets or sets a value indicating whether this is fluid.
    /// </summary>
    /// <value>
    ///   <c>true</c> if fluid; otherwise, <c>false</c>.
    /// </value>
    [Parameter] public bool Fluid { get; set; }
    /// <summary>
    /// Gets or sets the size.
    /// </summary>
    [Parameter] public Size? Size { get; set; }
    /// <summary>
    /// Gets or sets the state.
    /// </summary>
    [Parameter] public State? State { get; set; }
}
